package com.intelligent.service;

import com.intelligent.dto.ForgotPasswordDTO;
import com.intelligent.dto.LoginDTO;
import com.intelligent.dto.SmsCodeLoginDTO;
import com.intelligent.dto.SmsCodeSendDTO;
import com.intelligent.dto.UserPageQueryDTO;
import com.intelligent.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.intelligent.utils.Result;
import com.intelligent.vo.LoginVO;

import java.util.List;
import java.util.Map;

/**
 * @author lenovo
 * @description 针对表【t_user(系统用户表)】的数据库操作Service
 * @createDate 2025-08-26 11:51:45
 */
public interface UserService extends IService<User> {
    // 登录核心方法：接收登录参数，返回登录结果（Token+用户信息+权限）
    LoginVO login(LoginDTO loginDTO);

    // 根据用户名查询用户
    User getByUsername(String username);

    // 根据用户ID查询权限列表
    List<String> getPermissionsByUserId(Long userId);

    // 发送验证码

    String sendSmsCode(SmsCodeSendDTO sendDTO);

    // 验证码登录

    LoginVO smsCodeLogin(SmsCodeLoginDTO loginDTO);

    String getRoleName(Long userId);

    void updatePassword(ForgotPasswordDTO passwordDTO);

    /**
     * 登录态下修改本人手机号
     */
    void updatePhone(Long userId, SmsCodeLoginDTO loginDTO);

    /**
     * 用户分页查询业务（包含过滤条件与数据脱敏/补充逻辑）
     */
    Map<String, Object> pageUsers(UserPageQueryDTO query);

    /**
     * 新增用户：后端自动生成用户编号(userCode)与创建时间(createTime)。
     * 返回新用户ID。
     */
    Long addUser(User user);

    /**
     * 修改用户信息及角色：
     * 先删除用户与角色关联表中的相关数据，再按传入的 roleId 重新建立关联。
     */
    void updateUser(User user);

    /**
     * 删除用户：
     * 先删除用户与角色关联，再删除用户本身。
     */
    void deleteUser(Long userId);
}
